﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;





namespace Financiera
{
    public partial class Form_operaciones : Form
    {
        ///    ///     ///
        string rutaFinancieraSQL = Conexion.rutaDB;//+ ";Integrated Security=True;Connect Timeout=30;User Instance=True";//"Data Source=PC;Initial Catalog=Financiera;Integrated Security=True";//Conexion.rutaDB;
        string cod_moneda_recibo, cod_moneda_pago, tipoOperacion, fecha_vs, fecha_desde, fecha_hasta, rbselecionado;
        Form_Clientes_Operaciones frm = new Form_Clientes_Operaciones();
        decimal cotCompra, cotVenta, tempEditPago, tempEditCompro, monto;
        BindingManagerBase bmOperaciones;
        bool bandera_panel, _cargaTextBox = false;
        bool bandera_clientes=false;

        public Form_operaciones()
        {
            InitializeComponent();
        }

        private void CargaOperaciones() {
            if (Conexion.ds_financiera.Tables["Operaciones"] != null)
                Conexion.ds_financiera.Tables["Operaciones"].Clear();
            string ConsultaSQLOperaciones = "Select cod_operaciones_o as 'Cod Operacion',cod_cliente_o as 'Cod Cliente',apellido_c as 'Apellido',fecha_o as 'Fecha',hora_o as 'Horario' from Operaciones inner join Clientes on cod_cliente_o=cod_c";
            metodos.AgregarTablaDataSetSQLServer(rutaFinancieraSQL, ConsultaSQLOperaciones,
                                         "Operaciones", ref Conexion.ds_financiera);
            grilla_Operaciones.DataSource = Conexion.ds_financiera.Tables["Operaciones"];
        }

        private void CargaDetalle()
        {
            if (Conexion.ds_financiera.Tables["Detalle_operaciones"] != null)
                Conexion.ds_financiera.Tables["Detalle_operaciones"].Clear();
            string ConsultaSQLOperaciones = "Select cod_operacion_d as 'Cod Operacion',n_detalle_d as 'NºDetalle',cod_moneda_d as 'Cod Moneda',tipo_operacion_d 'Tipo Operacion',cotizacion_d as 'Cotizacion',bonificacion_d as 'Bonificacion',monto_d as 'Monto',pago_d as 'Pago',cod_moneda_pago_d as 'Cod Moneda Pago' from Detalle_operaciones where cod_operacion_d=" + Convert.ToInt32(grilla_Operaciones.CurrentRow.Cells[0].Value);
            metodos.AgregarTablaDataSetSQLServer(rutaFinancieraSQL, ConsultaSQLOperaciones,
                                         "Detalle_operaciones", ref Conexion.ds_financiera);
            grillaDetalle.DataSource = Conexion.ds_financiera.Tables["Detalle_operaciones"];
        }

        private void CargaDetalleEdit()
        {
            if (Conexion.ds_financiera.Tables["Detalle_operaciones"] != null)
                Conexion.ds_financiera.Tables["Detalle_operaciones"].Clear();
            string ConsultaSQLOperaciones = "Select cod_operacion_d as 'Cod Operacion',n_detalle_d as 'NºDetalle',cod_moneda_d as 'Cod Moneda',tipo_operacion_d 'Tipo Operacion',cotizacion_d as 'Cotizacion',bonificacion_d as 'Bonificacion',monto_d as 'Monto',pago_d as 'Pago',cod_moneda_pago_d as 'Cod Moneda Pago' from Detalle_operaciones";
            metodos.AgregarTablaDataSetSQLServer(rutaFinancieraSQL, ConsultaSQLOperaciones,
                                         "Detalle_operaciones", ref Conexion.ds_financiera);
            grillaDetalle.DataSource = Conexion.ds_financiera.Tables["Detalle_operaciones"];
        }

        private void CargaCotizacion()
        {
            Object valorDevuelto;
            SqlConnection cn = new SqlConnection();
            cn.ConnectionString = Conexion.rutaDB;
            SqlCommand cmd = new SqlCommand();
            cod_moneda_recibo = cmbMonedaOpCompra.SelectedItem.ToString();
            cod_moneda_pago = cmbMonedaOpPaga.SelectedItem.ToString();

            if (txt_monto.Text != "") {
                if (rdb_compra.Checked) {
                    #region Compro Pesos
                    //Compra Peso vs Dolar (CORREGIDO)
                    if (cod_moneda_recibo == "PE" && cod_moneda_pago == "DO")
                    {
                        decimal cotTemp;
                        if (chkCambiaCot.Checked == false)
                        {
                            cmd.CommandText = "select valor_venta_a from Moneda_Actual where cod_moneda_a = 'DO'";
                            cmd.CommandType = CommandType.Text;
                            cmd.Connection = cn;
                            cn.Open();
                            valorDevuelto = cmd.ExecuteScalar();
                            cn.Close();
                            monto = Convert.ToDecimal(txt_monto.Text.ToString());
                            //Cotizacion del dolar para vender
                            cotCompra = Convert.ToDecimal(valorDevuelto);
                            txt_cotizacion.Text = cotCompra.ToString();
                            //Pesos a entregar
                            cotTemp = monto / cotCompra;
                            monto = Math.Round(monto, 0);
                            txt_pago.Text = cotTemp.ToString();
                        }
                        else
                        {
                            cotCompra = Convert.ToDecimal(txt_cotizacion.Text);
                            cotTemp = monto / cotCompra;
                            monto = Math.Round(monto, 0);
                            txt_pago.Text = cotTemp.ToString();
                        }
                    }

                    //Compra Peso vs Libra (CORREGIDO)
                    else if (cod_moneda_recibo == "PE" && cod_moneda_pago == "LI")
                    {
                        decimal cotTemp;
                        if (chkCambiaCot.Checked == false)
                        {
                            //Cargo cot del dolar
                            cmd.CommandText = "select valor_venta_a from Moneda_Actual where cod_moneda_a = 'DO'";
                            cmd.CommandType = CommandType.Text;
                            cmd.Connection = cn;
                            cn.Open();
                            valorDevuelto = cmd.ExecuteScalar();
                            cn.Close();
                            cotVenta = Convert.ToDecimal(valorDevuelto);
                            monto = Convert.ToDecimal(txt_monto.Text.ToString());
                            //Compra de dolares por la cantidad de pesos
                            monto = monto / cotVenta;
                            //Cargo cot libra
                            cmd.CommandText = "select valor_venta_a from Moneda_Actual where cod_moneda_a = 'LI'";
                            cmd.CommandType = CommandType.Text;
                            cmd.Connection = cn;
                            cn.Open();
                            valorDevuelto = cmd.ExecuteScalar();
                            cn.Close();
                            //Guardo cotizacion libras
                            cotTemp = cotVenta;
                            //Cargo cotizacion dolar
                            cotVenta = Convert.ToDecimal(valorDevuelto);
                            //Compro libras por la cantidad de dolares.
                            monto = monto / cotVenta;
                            Convert.ToDecimal(monto);
                            monto = Math.Round(monto, 0);
                            cotTemp = cotTemp * cotVenta;
                            txt_cotizacion.Text = cotTemp.ToString();
                            txt_pago.Text = monto.ToString();
                        }
                        else
                        {
                            cotVenta = Convert.ToDecimal(txt_cotizacion.Text);
                            monto = Convert.ToDecimal(txt_monto.Text.ToString());
                            monto = monto / cotVenta;
                            monto = Math.Round(monto, 0);
                            txt_pago.Text = monto.ToString();
                        }
                    }
                    //Compra Peso vs Euro (CORREGIDO)
                    else if (cod_moneda_recibo == "PE" && cod_moneda_pago == "EU")
                    {
                        decimal cotTemp;
                        if (chkCambiaCot.Checked == false)
                        {
                            //Cargo cot del dolar
                            cmd.CommandText = "select valor_venta_a from Moneda_Actual where cod_moneda_a = 'DO'";
                            cmd.CommandType = CommandType.Text;
                            cmd.Connection = cn;
                            cn.Open();
                            valorDevuelto = cmd.ExecuteScalar();
                            cn.Close();
                            cotVenta = Convert.ToDecimal(valorDevuelto);
                            monto = Convert.ToDecimal(txt_monto.Text.ToString());
                            //Compra de dolares por la cantidad de Pesos 
                            monto = monto / cotVenta;
                            //Cargo cot euro
                            cmd.CommandText = "select valor_venta_a from Moneda_Actual where cod_moneda_a = 'EU'";
                            cmd.CommandType = CommandType.Text;
                            cmd.Connection = cn;
                            cn.Open();
                            valorDevuelto = cmd.ExecuteScalar();
                            cn.Close();
                            //Guardo cotizacion euro
                            cotTemp = cotVenta;
                            //Cargo cotizacion dolar
                            cotVenta = Convert.ToDecimal(valorDevuelto);
                            //Compro euros por la cantidad de dolares.
                            monto = monto / cotVenta;
                            Convert.ToDecimal(monto);
                            monto = Math.Round(monto, 0);
                            cotTemp = cotTemp * cotVenta;
                            txt_cotizacion.Text = cotTemp.ToString();
                            txt_pago.Text = monto.ToString();
                        }
                        else
                        {
                            cotVenta = Convert.ToDecimal(txt_cotizacion.Text);
                            monto = Convert.ToDecimal(txt_monto.Text.ToString());
                            monto = monto * cotVenta;
                            monto = Math.Round(monto, 0);
                            txt_pago.Text = monto.ToString();
                        }
                    }
                    //Compra Peso vs Real (CORREGIDO)
                    else if (cod_moneda_recibo == "PE" && cod_moneda_pago == "RE")
                    {
                        decimal cotTemp;
                        if (chkCambiaCot.Checked == false)
                        {
                            //Cargo cot del dolar venta
                            cmd.CommandText = "select valor_venta_a from Moneda_Actual where cod_moneda_a = 'DO'";
                            cmd.CommandType = CommandType.Text;
                            cmd.Connection = cn;
                            cn.Open();
                            valorDevuelto = cmd.ExecuteScalar();
                            cn.Close();
                            cotVenta = Convert.ToDecimal(valorDevuelto);
                            monto = Convert.ToDecimal(txt_monto.Text.ToString());
                            //Compra de dolares por la cantidad de las pesos 
                            monto = monto / cotVenta;
                            //Cargo cot real
                            cmd.CommandText = "select valor_compra_a from Moneda_Actual where cod_moneda_a = 'RE'";
                            cmd.CommandType = CommandType.Text;
                            cmd.Connection = cn;
                            cn.Open();
                            valorDevuelto = cmd.ExecuteScalar();
                            cn.Close();
                            //Guardo cotizacion real
                            cotTemp = cotVenta;
                            //Cargo cotizacion dolar
                            cotVenta = Convert.ToDecimal(valorDevuelto);
                            //Compro reales por la cantidad de dolares.
                            monto = monto * cotVenta;
                            Convert.ToDecimal(monto);
                            monto = Math.Round(monto, 0);
                            cotTemp = cotTemp * cotVenta;
                            txt_cotizacion.Text = cotTemp.ToString();
                            txt_pago.Text = monto.ToString();
                        }
                        else
                        {
                            cotVenta = Convert.ToDecimal(txt_cotizacion.Text);
                            monto = Convert.ToDecimal(txt_monto.Text.ToString());
                            monto = monto * cotVenta;
                            monto = Math.Round(monto, 0);
                            txt_pago.Text = monto.ToString();
                        }
                    }
                    //Compra Peso vs Uruguayo (CORREGIDO)
                    else if (cod_moneda_recibo == "PE" && cod_moneda_pago == "UR")
                    {
                        decimal cotTemp;
                        if (chkCambiaCot.Checked == false)
                        {
                            //Cargo cot de la libra venta
                            cmd.CommandText = "select valor_venta_a from Moneda_Actual where cod_moneda_a = 'DO'";
                            cmd.CommandType = CommandType.Text;
                            cmd.Connection = cn;
                            cn.Open();
                            valorDevuelto = cmd.ExecuteScalar();
                            cn.Close();
                            cotVenta = Convert.ToDecimal(valorDevuelto);
                            monto = Convert.ToDecimal(txt_monto.Text.ToString());
                            //Compra de dolares por la cantidad de las libras 
                            monto = monto / cotVenta;
                            //Cargo cot dolar
                            cmd.CommandText = "select valor_compra_a from Moneda_Actual where cod_moneda_a = 'UR'";
                            cmd.CommandType = CommandType.Text;
                            cmd.Connection = cn;
                            cn.Open();
                            valorDevuelto = cmd.ExecuteScalar();
                            cn.Close();
                            //Guardo cotizacion libras
                            cotTemp = cotVenta;
                            //Cargo cotizacion dolar
                            cotVenta = Convert.ToDecimal(valorDevuelto);
                            //Compro pesos por la cantidad de dolares.
                            monto = monto * cotVenta;
                            Convert.ToDecimal(monto);
                            monto = Math.Round(monto, 0);
                            cotTemp = cotTemp * cotVenta;
                            txt_cotizacion.Text = cotTemp.ToString();
                            txt_pago.Text = monto.ToString();
                        }
                        else
                        {
                            cotVenta = Convert.ToDecimal(txt_cotizacion.Text);
                            monto = Convert.ToDecimal(txt_monto.Text.ToString());
                            monto = monto * cotVenta;
                            monto = Math.Round(monto, 0);
                            txt_pago.Text = monto.ToString();
                        }
                    }
                    #endregion
                    #region Compro Dolar
                    //Compra Dolar con Peso (CORREGIDO)
                    else if (cod_moneda_recibo == "DO" && cod_moneda_pago == "PE")
                    {
                        if (chkCambiaCot.Checked == false)
                        {
                            cmd.CommandText = "select valor_compra_a from Moneda_Actual where cod_moneda_a = 'DO'";
                            cmd.CommandType = CommandType.Text;
                            cmd.Connection = cn;
                            cn.Open();
                            valorDevuelto = cmd.ExecuteScalar();
                            cn.Close();
                            cotCompra = Convert.ToDecimal(valorDevuelto);
                            monto = Convert.ToDecimal(txt_monto.Text);
                            monto = monto * cotCompra;
                            monto = Math.Round(monto, 0);
                            txt_cotizacion.Text = cotCompra.ToString();
                            txt_pago.Text = monto.ToString();
                        }
                        else
                        {
                            cotVenta = Convert.ToDecimal(txt_cotizacion.Text);
                            monto = Convert.ToDecimal(txt_monto.Text.ToString());
                            monto = monto * cotVenta;
                            monto = Math.Round(monto, 0);
                            txt_pago.Text = monto.ToString();
                        }
                    }
                    //Compra Dolar contra Libra (CORREGIDO)
                    else if (cod_moneda_recibo == "DO" && cod_moneda_pago == "LI")
                    {
                        if (chkCambiaCot.Checked == false)
                        {
                            cmd.CommandText = "select valor_venta_a from Moneda_Actual where cod_moneda_a = 'LI'";
                            cmd.CommandType = CommandType.Text;
                            cmd.Connection = cn;
                            cn.Open();
                            valorDevuelto = cmd.ExecuteScalar();
                            cn.Close();
                            cotCompra = Convert.ToDecimal(valorDevuelto);
                            monto = Convert.ToDecimal(txt_monto.Text);
                            monto = monto / cotCompra;
                            monto = Math.Round(monto, 0);
                            txt_cotizacion.Text = cotCompra.ToString();
                            txt_pago.Text = monto.ToString();
                        }
                        else
                        {
                            cotVenta = Convert.ToDecimal(txt_cotizacion.Text);
                            monto = Convert.ToDecimal(txt_monto.Text.ToString());
                            monto = monto / cotVenta;
                            monto = Math.Round(monto, 0);
                            txt_pago.Text = monto.ToString();
                        }

                    }
                    //Compra Dolar contra Euro (CORREGIDO)
                    else if (cod_moneda_recibo == "DO" && cod_moneda_pago == "EU")
                    {
                        if (chkCambiaCot.Checked == false)
                        {
                            cmd.CommandText = "select valor_venta_a from Moneda_Actual where cod_moneda_a = 'EU'";
                            cmd.CommandType = CommandType.Text;
                            cmd.Connection = cn;
                            cn.Open();
                            valorDevuelto = cmd.ExecuteScalar();
                            cn.Close();
                            cotCompra = Convert.ToDecimal(valorDevuelto);
                            monto = Convert.ToDecimal(txt_monto.Text);
                            monto = monto / cotCompra;
                            monto = Math.Round(monto, 0);
                            txt_cotizacion.Text = cotCompra.ToString();
                            txt_pago.Text = monto.ToString();
                        }
                        else
                        {
                            cotVenta = Convert.ToDecimal(txt_cotizacion.Text);
                            monto = Convert.ToDecimal(txt_monto.Text.ToString());
                            monto = monto / cotVenta;
                            monto = Math.Round(monto, 0);
                            txt_pago.Text = monto.ToString();
                        }

                    }
                    //Compra Dolar contra Real (CORREGIDO)
                    else if (cod_moneda_recibo == "DO" && cod_moneda_pago == "RE")
                    {
                        if (chkCambiaCot.Checked == false)
                        {
                            cmd.CommandText = "select valor_compra_a from Moneda_Actual where cod_moneda_a = 'RE'";
                            cmd.CommandType = CommandType.Text;
                            cmd.Connection = cn;
                            cn.Open();
                            valorDevuelto = cmd.ExecuteScalar();
                            cn.Close();
                            cotCompra = Convert.ToDecimal(valorDevuelto);
                            monto = Convert.ToDecimal(txt_monto.Text);
                            monto = monto * cotCompra;
                            monto = Math.Round(monto, 0);
                            txt_cotizacion.Text = cotCompra.ToString();
                            txt_pago.Text = monto.ToString();
                        }
                        else
                        {
                            cotVenta = Convert.ToDecimal(txt_cotizacion.Text);
                            monto = Convert.ToDecimal(txt_monto.Text.ToString());
                            monto = monto * cotVenta;
                            monto = Math.Round(monto, 0);
                            txt_pago.Text = monto.ToString();
                        }

                    }
                    //Venta Dolar contra Uruguayo (CORREGIDO)
                    else if (cod_moneda_recibo == "DO" && cod_moneda_pago == "UR")
                    {
                        if (chkCambiaCot.Checked == false)
                        {
                            cmd.CommandText = "select valor_compra_a from Moneda_Actual where cod_moneda_a = 'UR'";
                            cmd.CommandType = CommandType.Text;
                            cmd.Connection = cn;
                            cn.Open();
                            valorDevuelto = cmd.ExecuteScalar();
                            cn.Close();
                            cotCompra = Convert.ToDecimal(valorDevuelto);
                            monto = Convert.ToDecimal(txt_monto.Text);
                            monto = monto * cotCompra;
                            monto = Math.Round(monto, 0);
                            txt_cotizacion.Text = cotCompra.ToString();
                            txt_pago.Text = monto.ToString();
                        }
                        else
                        {
                            cotVenta = Convert.ToDecimal(txt_cotizacion.Text);
                            monto = Convert.ToDecimal(txt_monto.Text.ToString());
                            monto = monto * cotVenta;
                            monto = Math.Round(monto, 0);
                            txt_pago.Text = monto.ToString();
                        }

                    }
                    #endregion
                    #region Compro Libra
                    //Compro Libra contra dolar (CORREGIDO)
                    else if (cod_moneda_recibo == "LI" && cod_moneda_pago == "DO")
                    {
                        if (chkCambiaCot.Checked == false)
                        {
                            cmd.CommandText = "select valor_compra_a from Moneda_Actual where cod_moneda_a = 'LI'";
                            cmd.CommandType = CommandType.Text;
                            cmd.Connection = cn;
                            cn.Open();
                            valorDevuelto = cmd.ExecuteScalar();
                            cn.Close();
                            cotVenta = Convert.ToDecimal(valorDevuelto);
                            monto = Convert.ToDecimal(txt_monto.Text);
                            monto = monto * cotVenta;
                            monto = Math.Round(monto, 0);
                            txt_cotizacion.Text = cotVenta.ToString();
                            txt_pago.Text = monto.ToString();
                        }
                        else
                        {
                            cotVenta = Convert.ToDecimal(txt_cotizacion.Text);
                            monto = Convert.ToDecimal(txt_monto.Text.ToString());
                            monto = monto * cotVenta;
                            monto = Math.Round(monto, 0);
                            txt_pago.Text = monto.ToString();
                        }
                    }
                    //Compro Libra contra Euro (CORREGIDO)
                    else if (cod_moneda_recibo == "LI" && cod_moneda_pago == "EU")
                    {
                        if (chkCambiaCot.Checked == false)
                        {
                            decimal cotTemp;
                            cmd.CommandText = "select valor_compra_a from Moneda_Actual where cod_moneda_a = 'LI'";
                            cmd.CommandType = CommandType.Text;
                            cmd.Connection = cn;
                            cn.Open();
                            valorDevuelto = cmd.ExecuteScalar();
                            cn.Close();
                            cotVenta = Convert.ToDecimal(valorDevuelto);
                            monto = Convert.ToDecimal(txt_monto.Text);
                            monto = monto * cotVenta;
                            //Cargo cot Euro
                            cmd.CommandText = "select valor_venta_a from Moneda_Actual where cod_moneda_a = 'EU'";
                            cmd.CommandType = CommandType.Text;
                            cmd.Connection = cn;
                            cn.Open();
                            valorDevuelto = cmd.ExecuteScalar();
                            cn.Close();
                            //Guardo cotizacion libras
                            cotTemp = cotVenta;
                            //Cargo cotizacion dolar
                            cotVenta = Convert.ToDecimal(valorDevuelto);
                            monto = monto / cotVenta;
                            monto = Math.Round(monto, 0);
                            txt_cotizacion.Text = (cotTemp / cotVenta).ToString();
                            txt_pago.Text = monto.ToString();
                        }
                        else
                        {
                            cotVenta = Convert.ToDecimal(txt_cotizacion.Text);
                            monto = Convert.ToDecimal(txt_monto.Text.ToString());
                            monto = monto / cotVenta;
                            monto = Math.Round(monto, 0);
                            txt_pago.Text = monto.ToString();
                        }
                    }
                    //Compro Libra contra Peso
                    else if (cod_moneda_recibo == "LI" && cod_moneda_pago == "PE")
                    {
                        if (chkCambiaCot.Checked == false)
                        {
                            decimal cotTemp;
                            cmd.CommandText = "select valor_compra_a from Moneda_Actual where cod_moneda_a = 'LI'";
                            cmd.CommandType = CommandType.Text;
                            cmd.Connection = cn;
                            cn.Open();
                            valorDevuelto = cmd.ExecuteScalar();
                            cn.Close();
                            cotCompra = Convert.ToDecimal(valorDevuelto);
                            monto = Convert.ToDecimal(txt_monto.Text);
                            monto = monto * cotCompra;
                            //Cargo cot Euro
                            cmd.CommandText = "select valor_compra_a from Moneda_Actual where cod_moneda_a = 'DO'";
                            cmd.CommandType = CommandType.Text;
                            cmd.Connection = cn;
                            cn.Open();
                            valorDevuelto = cmd.ExecuteScalar();
                            cn.Close();
                            //Guardo cotizacion libras
                            cotTemp = cotVenta;
                            //Cargo cotizacion dolar
                            cotVenta = Convert.ToDecimal(valorDevuelto);
                            monto = monto * cotVenta;
                            monto = Math.Round(monto, 0);
                            txt_cotizacion.Text = (cotTemp * cotVenta).ToString();
                            txt_pago.Text = monto.ToString();
                        }
                        else
                        {
                            cotVenta = Convert.ToDecimal(txt_cotizacion.Text);
                            monto = Convert.ToDecimal(txt_monto.Text.ToString());
                            monto = monto * cotVenta;
                            monto = Math.Round(monto, 0);
                            txt_pago.Text = monto.ToString();
                        }
                    }
                    //Compra Dolar con Uruguayo
                    else if (cod_moneda_recibo == "LI" && cod_moneda_pago == "RE")
                    {
                        if (chkCambiaCot.Checked == false)
                        {
                            decimal cotTemp;
                            cmd.CommandText = "select valor_compra_a from Moneda_Actual where cod_moneda_a = 'LI'";
                            cmd.CommandType = CommandType.Text;
                            cmd.Connection = cn;
                            cn.Open();
                            valorDevuelto = cmd.ExecuteScalar();
                            cn.Close();
                            cotCompra = Convert.ToDecimal(valorDevuelto);
                            monto = Convert.ToDecimal(txt_monto.Text);
                            monto = monto * cotCompra;
                            //Cargo cot Euro
                            cmd.CommandText = "select valor_venta_a from Moneda_Actual where cod_moneda_a = 'RE'";
                            cmd.CommandType = CommandType.Text;
                            cmd.Connection = cn;
                            cn.Open();
                            valorDevuelto = cmd.ExecuteScalar();
                            cn.Close();
                            //Guardo cotizacion libras
                            cotTemp = cotVenta;
                            //Cargo cotizacion dolar
                            cotVenta = Convert.ToDecimal(valorDevuelto);
                            monto = monto * cotVenta;
                            monto = Math.Round(monto, 0);
                            txt_cotizacion.Text = (cotTemp * cotVenta).ToString();
                            txt_pago.Text = monto.ToString();
                        }
                        else
                        {
                            cotVenta = Convert.ToDecimal(txt_cotizacion.Text);
                            monto = Convert.ToDecimal(txt_monto.Text.ToString());
                            monto = monto * cotVenta;
                            monto = Math.Round(monto, 0);
                            txt_pago.Text = monto.ToString();
                        }
                    }
                    //Compra Dolar con Uruguayo
                    else if (cod_moneda_recibo == "LI" && cod_moneda_pago == "UR")
                    {
                        if (chkCambiaCot.Checked == false)
                        {
                            decimal cotTemp;
                            cmd.CommandText = "select valor_compra_a from Moneda_Actual where cod_moneda_a = 'LI'";
                            cmd.CommandType = CommandType.Text;
                            cmd.Connection = cn;
                            cn.Open();
                            valorDevuelto = cmd.ExecuteScalar();
                            cn.Close();
                            cotCompra = Convert.ToDecimal(valorDevuelto);
                            monto = Convert.ToDecimal(txt_monto.Text);
                            monto = monto * cotCompra;
                            //Cargo cot Euro
                            cmd.CommandText = "select valor_venta_a from Moneda_Actual where cod_moneda_a = 'UR'";
                            cmd.CommandType = CommandType.Text;
                            cmd.Connection = cn;
                            cn.Open();
                            valorDevuelto = cmd.ExecuteScalar();
                            cn.Close();
                            //Guardo cotizacion libras
                            cotTemp = cotVenta;
                            //Cargo cotizacion dolar
                            cotVenta = Convert.ToDecimal(valorDevuelto);
                            monto = monto / cotVenta;
                            monto = Math.Round(monto, 0);
                            txt_cotizacion.Text = (cotTemp * cotVenta).ToString();
                            txt_pago.Text = monto.ToString();
                        }
                        else
                        {
                            cotVenta = Convert.ToDecimal(txt_cotizacion.Text);
                            monto = Convert.ToDecimal(txt_monto.Text.ToString());
                            monto = monto * cotVenta;
                            monto = Math.Round(monto, 0);
                            txt_pago.Text = monto.ToString();
                        }
                    }
                    #endregion
                    #region Compro Euros
                    //Compra Euro vs Peso
                    else if (cod_moneda_recibo == "EU" && cod_moneda_pago == "PE")
                    {
                        decimal cotTemp;
                        if (chkCambiaCot.Checked == false)
                        {
                            cmd.CommandText = "select valor_compra_a from Moneda_Actual where cod_moneda_a = 'EU'";
                            cmd.CommandType = CommandType.Text;
                            cmd.Connection = cn;
                            cn.Open();
                            valorDevuelto = cmd.ExecuteScalar();
                            cn.Close();
                            cotCompra = Convert.ToDecimal(valorDevuelto);
                            monto = Convert.ToDecimal(txt_monto.Text.ToString());
                            monto = monto * cotCompra;
                            monto = Math.Round(monto, 2);
                            cmd.CommandText = "select valor_compra_a from Moneda_Actual where cod_moneda_a = 'DO'";
                            cmd.CommandType = CommandType.Text;
                            cmd.Connection = cn;
                            cotTemp = cotCompra;
                            cn.Open();
                            valorDevuelto = cmd.ExecuteScalar();
                            cn.Close();
                            cotTemp = cotCompra;
                            cotCompra = Convert.ToDecimal(valorDevuelto);
                            monto = monto * cotCompra;
                            Convert.ToDecimal(monto);
                            monto = Math.Round(monto, 1);
                            cotTemp = cotTemp * cotCompra;
                            cotTemp = Math.Round(cotTemp, 2);
                            txt_cotizacion.Text = cotTemp.ToString();
                            txt_pago.Text = monto.ToString();
                        }
                        else
                        {
                            cotVenta = Convert.ToDecimal(txt_cotizacion.Text);
                            monto = Convert.ToDecimal(txt_monto.Text.ToString());
                            monto = monto / cotVenta;
                            monto = Math.Round(monto, 0);
                            txt_pago.Text = monto.ToString();
                        }
                    }
                    //Compro Euro vs Dolar
                    else if (cod_moneda_recibo == "EU" && cod_moneda_pago == "DO")
                    {
                        if (chkCambiaCot.Checked == false)
                        {
                            cmd.CommandText = "select valor_compra_a from Moneda_Actual where cod_moneda_a = 'EU'";
                            cmd.CommandType = CommandType.Text;
                            cmd.Connection = cn;
                            cn.Open();
                            valorDevuelto = cmd.ExecuteScalar();
                            cn.Close();
                            cotCompra = Convert.ToDecimal(valorDevuelto);
                            monto = Convert.ToDecimal(txt_monto.Text.ToString());
                            monto = monto * cotCompra;
                            Convert.ToDecimal(monto);
                            monto = Math.Round(monto, 0);
                            txt_cotizacion.Text = cotCompra.ToString();
                            txt_pago.Text = monto.ToString();
                        }
                        else
                        {
                            cotVenta = Convert.ToDecimal(txt_cotizacion.Text);
                            monto = Convert.ToDecimal(txt_monto.Text.ToString());
                            monto = monto * cotVenta;
                            monto = Math.Round(monto, 0);
                            txt_pago.Text = monto.ToString();
                        }
                    }
                    //Compro Euro vs Libra
                    else if (cod_moneda_recibo == "EU" && cod_moneda_pago == "LI")
                    {
                        if (chkCambiaCot.Checked == false)
                        {
                            decimal cotTemp;
                            cmd.CommandText = "select valor_compra_a from Moneda_Actual where cod_moneda_a = 'EU'";
                            cmd.CommandType = CommandType.Text;
                            cmd.Connection = cn;
                            cn.Open();
                            valorDevuelto = cmd.ExecuteScalar();
                            cn.Close();
                            cotCompra = Convert.ToDecimal(valorDevuelto);
                            monto = Convert.ToDecimal(txt_monto.Text.ToString());
                            monto = monto * cotCompra;
                            cmd.CommandText = "select valor_venta_a from Moneda_Actual where cod_moneda_a = 'LI'";
                            cmd.CommandType = CommandType.Text;
                            cmd.Connection = cn;
                            cotTemp = cotCompra;
                            cn.Open();
                            valorDevuelto = cmd.ExecuteScalar();
                            cn.Close();
                            cotTemp = cotCompra;
                            cotCompra = Convert.ToDecimal(valorDevuelto);
                            monto = monto / cotCompra;
                            Convert.ToDecimal(monto);
                            monto = Math.Round(monto, 1);
                            cotTemp = cotTemp / cotCompra;
                            txt_cotizacion.Text = cotTemp.ToString();
                            txt_pago.Text = monto.ToString();
                        }
                        else
                        {
                            cotVenta = Convert.ToDecimal(txt_cotizacion.Text);
                            monto = Convert.ToDecimal(txt_monto.Text.ToString());
                            monto = monto / cotVenta;
                            monto = Math.Round(monto, 0);
                            txt_pago.Text = monto.ToString();
                        }
                    }
                    //Compro Euro vs Real
                    else if (cod_moneda_recibo == "EU" && cod_moneda_pago == "RE")
                    {
                        if (chkCambiaCot.Checked == false)
                        {
                            decimal cotTemp;
                            cmd.CommandText = "select valor_compra_a from Moneda_Actual where cod_moneda_a = 'EU'";
                            cmd.CommandType = CommandType.Text;
                            cmd.Connection = cn;
                            cn.Open();
                            valorDevuelto = cmd.ExecuteScalar();
                            cn.Close();
                            cotCompra = Convert.ToDecimal(valorDevuelto);
                            monto = Convert.ToDecimal(txt_monto.Text.ToString());
                            monto = monto * cotCompra;
                            cmd.CommandText = "select valor_compra_a from Moneda_Actual where cod_moneda_a = 'RE'";
                            cmd.CommandType = CommandType.Text;
                            cmd.Connection = cn;
                            cotTemp = cotCompra;
                            cn.Open();
                            valorDevuelto = cmd.ExecuteScalar();
                            cn.Close();
                            cotTemp = cotCompra;
                            cotCompra = Convert.ToDecimal(valorDevuelto);
                            monto = monto * cotCompra;
                            Convert.ToDecimal(monto);
                            monto = Math.Round(monto, 1);
                            cotTemp = cotTemp * cotCompra;
                            txt_cotizacion.Text = cotTemp.ToString();
                            txt_pago.Text = monto.ToString();
                        }
                        else
                        {
                            cotVenta = Convert.ToDecimal(txt_cotizacion.Text);
                            monto = Convert.ToDecimal(txt_monto.Text.ToString());
                            monto = monto * cotVenta;
                            monto = Math.Round(monto, 0);
                            txt_pago.Text = monto.ToString();
                        }
                    }
                    //Compro Euro vs Uruguayo
                    else if (cod_moneda_recibo == "EU" && cod_moneda_pago == "UR")
                    {
                        if (chkCambiaCot.Checked == false)
                        {
                            decimal cotTemp;
                            cmd.CommandText = "select valor_compra_a from Moneda_Actual where cod_moneda_a = 'EU'";
                            cmd.CommandType = CommandType.Text;
                            cmd.Connection = cn;
                            cn.Open();
                            valorDevuelto = cmd.ExecuteScalar();
                            cn.Close();
                            cotCompra = Convert.ToDecimal(valorDevuelto);
                            monto = Convert.ToDecimal(txt_monto.Text.ToString());
                            monto = monto * cotCompra;
                            cmd.CommandText = "select valor_compra_a from Moneda_Actual where cod_moneda_a = 'UR'";
                            cmd.CommandType = CommandType.Text;
                            cmd.Connection = cn;
                            cotTemp = cotCompra;
                            cn.Open();
                            valorDevuelto = cmd.ExecuteScalar();
                            cn.Close();
                            cotTemp = cotCompra;
                            cotCompra = Convert.ToDecimal(valorDevuelto);
                            monto = monto * cotCompra;
                            Convert.ToDecimal(monto);
                            monto = Math.Round(monto, 1);
                            cotTemp = cotTemp * cotCompra;
                            txt_cotizacion.Text = cotTemp.ToString();
                            txt_pago.Text = monto.ToString();
                        }
                        else
                        {
                            cotVenta = Convert.ToDecimal(txt_cotizacion.Text);
                            monto = Convert.ToDecimal(txt_monto.Text.ToString());
                            monto = monto * cotVenta;
                            monto = Math.Round(monto, 0);
                            txt_pago.Text = monto.ToString();
                        }
                    }
                    #endregion
                    #region Compro Real
                    //Compro Real vs Peso
                    else if (cod_moneda_recibo == "RE" && cod_moneda_pago == "PE")
                    {
                        decimal cotTemp;
                        if (chkCambiaCot.Checked == false)
                        {
                            cmd.CommandText = "select valor_venta_a from Moneda_Actual where cod_moneda_a = 'RE'";
                            cmd.CommandType = CommandType.Text;
                            cmd.Connection = cn;
                            cn.Open();
                            valorDevuelto = cmd.ExecuteScalar();
                            cn.Close();
                            cotCompra = Convert.ToDecimal(valorDevuelto);
                            monto = Convert.ToDecimal(txt_monto.Text.ToString());
                            monto = monto / cotCompra;
                            cmd.CommandText = "select valor_compra_a from Moneda_Actual where cod_moneda_a = 'DO'";
                            cmd.CommandType = CommandType.Text;
                            cmd.Connection = cn;
                            cotTemp = cotCompra;
                            cn.Open();
                            valorDevuelto = cmd.ExecuteScalar();
                            cn.Close();
                            cotTemp = cotCompra;
                            cotCompra = Convert.ToDecimal(valorDevuelto);
                            monto = monto * cotCompra;
                            Convert.ToDecimal(monto);
                            monto = Math.Round(monto, 1);
                            cotTemp = cotTemp / cotCompra;
                            txt_cotizacion.Text = cotTemp.ToString();
                            txt_pago.Text = monto.ToString();
                        }
                        else
                        {
                            cotVenta = Convert.ToDecimal(txt_cotizacion.Text);
                            monto = Convert.ToDecimal(txt_monto.Text.ToString());
                            monto = monto * cotVenta;
                            monto = Math.Round(monto, 0);
                            txt_pago.Text = monto.ToString();
                        }
                    }
                    //Compro Real vs Dolar
                    else if (cod_moneda_recibo == "RE" && cod_moneda_pago == "DO")
                    {
                        if (chkCambiaCot.Checked == false)
                        {
                            cmd.CommandText = "select valor_venta_a from Moneda_Actual where cod_moneda_a = 'RE'";
                            cmd.CommandType = CommandType.Text;
                            cmd.Connection = cn;
                            cn.Open();
                            valorDevuelto = cmd.ExecuteScalar();
                            cn.Close();
                            cotCompra = Convert.ToDecimal(valorDevuelto);
                            monto = Convert.ToDecimal(txt_monto.Text.ToString());
                            monto = monto / cotCompra;
                            Convert.ToDecimal(monto);
                            monto = Math.Round(monto, 0);
                            txt_cotizacion.Text = cotCompra.ToString();
                            txt_pago.Text = monto.ToString();
                        }
                        else
                        {
                            cotVenta = Convert.ToDecimal(txt_cotizacion.Text);
                            monto = Convert.ToDecimal(txt_monto.Text.ToString());
                            monto = monto / cotVenta;
                            monto = Math.Round(monto, 0);
                            txt_pago.Text = monto.ToString();
                        }
                    }
                    //Compro Real vs Libra
                    else if (cod_moneda_recibo == "EU" && cod_moneda_pago == "LI")
                    {
                        if (chkCambiaCot.Checked == false)
                        {
                            decimal cotTemp;
                            cmd.CommandText = "select valor_venta_a from Moneda_Actual where cod_moneda_a = 'RE'";
                            cmd.CommandType = CommandType.Text;
                            cmd.Connection = cn;
                            cn.Open();
                            valorDevuelto = cmd.ExecuteScalar();
                            cn.Close();
                            cotCompra = Convert.ToDecimal(valorDevuelto);
                            monto = Convert.ToDecimal(txt_monto.Text.ToString());
                            monto = monto / cotCompra;
                            cmd.CommandText = "select valor_compra_a from Moneda_Actual where cod_moneda_a = 'LI'";
                            cmd.CommandType = CommandType.Text;
                            cmd.Connection = cn;
                            cotTemp = cotCompra;
                            cn.Open();
                            valorDevuelto = cmd.ExecuteScalar();
                            cn.Close();
                            cotTemp = cotCompra;
                            cotCompra = Convert.ToDecimal(valorDevuelto);
                            monto = monto * cotCompra;
                            Convert.ToDecimal(monto);
                            monto = Math.Round(monto, 1);
                            cotTemp = cotTemp / cotCompra;
                            txt_cotizacion.Text = cotTemp.ToString();
                            txt_pago.Text = monto.ToString();
                        }
                        else
                        {
                            cotVenta = Convert.ToDecimal(txt_cotizacion.Text);
                            monto = Convert.ToDecimal(txt_monto.Text.ToString());
                            monto = monto * cotVenta;
                            monto = Math.Round(monto, 0);
                            txt_pago.Text = monto.ToString();
                        }
                    }
                    //Compro Real vs Euro
                    else if (cod_moneda_recibo == "RE" && cod_moneda_pago == "EU")
                    {
                        if (chkCambiaCot.Checked == false)
                        {
                            decimal cotTemp;
                            cmd.CommandText = "select valor_venta_a from Moneda_Actual where cod_moneda_a = 'RE'";
                            cmd.CommandType = CommandType.Text;
                            cmd.Connection = cn;
                            cn.Open();
                            valorDevuelto = cmd.ExecuteScalar();
                            cn.Close();
                            cotCompra = Convert.ToDecimal(valorDevuelto);
                            monto = Convert.ToDecimal(txt_monto.Text.ToString());
                            monto = monto / cotCompra;
                            cmd.CommandText = "select valor_compra_a from Moneda_Actual where cod_moneda_a = 'EU'";
                            cmd.CommandType = CommandType.Text;
                            cmd.Connection = cn;
                            cotTemp = cotCompra;
                            cn.Open();
                            valorDevuelto = cmd.ExecuteScalar();
                            cn.Close();
                            cotTemp = cotCompra;
                            cotCompra = Convert.ToDecimal(valorDevuelto);
                            monto = monto * cotCompra;
                            Convert.ToDecimal(monto);
                            monto = Math.Round(monto, 1);
                            cotTemp = cotTemp / cotCompra;
                            txt_cotizacion.Text = cotTemp.ToString();
                            txt_pago.Text = monto.ToString();
                        }
                        else
                        {
                            cotVenta = Convert.ToDecimal(txt_cotizacion.Text);
                            monto = Convert.ToDecimal(txt_monto.Text.ToString());
                            monto = monto * cotVenta;
                            monto = Math.Round(monto, 0);
                            txt_pago.Text = monto.ToString();
                        }   txt_pago.Text = monto.ToString();
                    }
                    //Compro Real vs Uruguayo
                    else if (cod_moneda_recibo == "RE" && cod_moneda_pago == "UR")
                    {
                        if (chkCambiaCot.Checked == false)
                        {
                            decimal cotTemp;
                            cmd.CommandText = "select valor_venta_a from Moneda_Actual where cod_moneda_a = 'RE'";
                            cmd.CommandType = CommandType.Text;
                            cmd.Connection = cn;
                            cn.Open();
                            valorDevuelto = cmd.ExecuteScalar();
                            cn.Close();
                            cotCompra = Convert.ToDecimal(valorDevuelto);
                            monto = Convert.ToDecimal(txt_monto.Text.ToString());
                            monto = monto / cotCompra;
                            cmd.CommandText = "select valor_compra_a from Moneda_Actual where cod_moneda_a = 'UR'";
                            cmd.CommandType = CommandType.Text;
                            cmd.Connection = cn;
                            cotTemp = cotCompra;
                            cn.Open();
                            valorDevuelto = cmd.ExecuteScalar();
                            cn.Close();
                            cotTemp = cotCompra;
                            cotCompra = Convert.ToDecimal(valorDevuelto);
                            monto = monto / cotCompra;
                            Convert.ToDecimal(monto);
                            monto = Math.Round(monto, 1);
                            cotTemp = cotTemp / cotCompra;
                            txt_cotizacion.Text = cotTemp.ToString();
                            txt_pago.Text = monto.ToString();
                        }
                        else
                        {
                            cotVenta = Convert.ToDecimal(txt_cotizacion.Text);
                            monto = Convert.ToDecimal(txt_monto.Text.ToString());
                            monto = monto / cotVenta;
                            monto = Math.Round(monto, 0);
                            txt_pago.Text = monto.ToString();
                        }
                    }
                    #endregion
                } 
            }
        }

        private void btn_nuevaop_Click(object sender, EventArgs e)
        {
            bandera_panel = false;
            //visual
            gp_mostraroperaciones.Visible = false;
            grillaDetalle.Visible = false;
            gp_nuevaoperacion.Visible = true;
            this.Size = new System.Drawing.Size(1300, 680);
            grillaAgregaDetalle.Visible = true;
            CargaDetalle();
            //codigo
            txt_año.Text = Conexion.fecha_a;
            txt_mes.Text = Conexion.fecha_m;
            txt_dia.Text = Conexion.fecha_d;
            txtHora.Text = Conexion.hora.ToString();

            Object cod_op;
            string ConsultaSQL = "SELECT MAX(cod_operaciones_o+1) FROM Operaciones";
            SqlConnection cn = new SqlConnection(Conexion.rutaDB);
            cn.Open();
            SqlCommand comando = new SqlCommand(ConsultaSQL, cn);
            cod_op = comando.ExecuteScalar();
            Convert.ToInt32(cod_op);
            cn.Close();
            lbl_cod_operacion.Text = cod_op.ToString();
            lbl_detalle.Text = grillaAgregaDetalle.RowCount.ToString();
        }
        
        
        private void btn_mostrarop_Click(object sender, EventArgs e)
        {
            bandera_panel = true;
            gp_nuevaoperacion.Visible = false;
            grillaAgregaDetalle.Visible = false;
            gp_mostraroperaciones.Visible = true;
            grillaDetalle.Visible=true;
            rdb_operacion.Select();
            p_detalles.Enabled = false;
            this.Size = new System.Drawing.Size(1300, 680);
            grillaAgregaDetalle.Visible = true;
            CargaDetalle();
        }

        private void rdb_operacion_CheckedChanged(object sender, EventArgs e)
        {
            p_detalles.Enabled = false;
            p_operacion.Enabled = true;           
        }

        private void rdb_detalle_CheckedChanged(object sender, EventArgs e)
        {
            p_operacion.Enabled = false;
            p_detalles.Enabled = true;
        }

        private void CargaTextBox()
        {
            txtEditCodOP.DataBindings.Add(new Binding("Text", Conexion.ds_financiera,
           "Detalle_operaciones." + Conexion.ds_financiera.Tables["Detalle_operaciones"].Columns[0].ColumnName.ToString()));
            txtEditNroDet.DataBindings.Add(new Binding("Text", Conexion.ds_financiera,
           "Detalle_operaciones." + Conexion.ds_financiera.Tables["Detalle_operaciones"].Columns[1].ColumnName.ToString()));
            txtEditCodMonedaComp.DataBindings.Add(new Binding("Text", Conexion.ds_financiera,
           "Detalle_operaciones." + Conexion.ds_financiera.Tables["Detalle_operaciones"].Columns[2].ColumnName.ToString()));
            txtEditTipoOp.DataBindings.Add(new Binding("Text", Conexion.ds_financiera,
           "Detalle_operaciones." + Conexion.ds_financiera.Tables["Detalle_operaciones"].Columns[3].ColumnName.ToString()));
            txtEditCot.DataBindings.Add(new Binding("Text", Conexion.ds_financiera,
           "Detalle_operaciones." + Conexion.ds_financiera.Tables["Detalle_operaciones"].Columns[4].ColumnName.ToString()));
            txtEditBoni.DataBindings.Add(new Binding("Text", Conexion.ds_financiera,
           "Detalle_operaciones." + Conexion.ds_financiera.Tables["Detalle_operaciones"].Columns[5].ColumnName.ToString()));
            txtEditMonto.DataBindings.Add(new Binding("Text", Conexion.ds_financiera,
           "Detalle_operaciones." + Conexion.ds_financiera.Tables["Detalle_operaciones"].Columns[6].ColumnName.ToString()));
            txtEditPago.DataBindings.Add(new Binding("Text", Conexion.ds_financiera,
           "Detalle_operaciones." + Conexion.ds_financiera.Tables["Detalle_operaciones"].Columns[7].ColumnName.ToString()));
            txtEditCodMonedaPago.DataBindings.Add(new Binding("Text", Conexion.ds_financiera,
           "Detalle_operaciones." + Conexion.ds_financiera.Tables["Detalle_operaciones"].Columns[8].ColumnName.ToString()));
        }

        private void Form_operaciones_Load(object sender, EventArgs e)
        {
            btnGuardaOperacion.Enabled = false;
            this.Size = new System.Drawing.Size(761, 680);
            CargaOperaciones();
            //carga de monedas
            if (cmbMonedaOpCompra.Items.Count > 0 && cmbMonedaOpPaga.Items.Count > 0 && cmb_moneda_d.Items.Count > 0)
            {
                cmbMonedaOpCompra.Items.Clear();
            }

            //se declara una variable de tipo SqlConnection
            SqlConnection cn = new SqlConnection();
            //se indica la cadena de conexion
            cn.ConnectionString = Conexion.rutaDB;
            //código para llenar el comboBox
            DataSet ds = new DataSet();
            //indicamos la consulta en SQL
            SqlDataAdapter da = new SqlDataAdapter("SELECT DISTINCT Cod_moneda_a FROM Moneda_actual", cn);
            //se indica el nombre de la tabla
            da.Fill(ds, "Moneda_actual");
            
            foreach (DataRow row in ds.Tables["Moneda_actual"].Rows)
            {
                cmbMonedaOpCompra.Items.Add(row[0].ToString());
                cmbMonedaOpPaga.Items.Add(row[0].ToString());
                cmb_moneda_d.Items.Add(row[0].ToString());
            }
            cmb_moneda_d.Items.Add("Todas");
            cmbMonedaOpCompra.SelectedIndex = 0;
            cmbMonedaOpPaga.SelectedIndex = 3;
            txt_bonificacion.Text = 0.ToString();
            CargaDetalle();
            CargaCotizacion();
            frm.Show();
            frm.Visible = false;
            grillaDetalle.DataSource = null;
            CargaDetalleEdit();
            bmOperaciones = BindingContext[Conexion.ds_financiera, "Detalle_operaciones"];
            CargaTextBox();
        }

        private void cmbMonedaOpCompra_DropDownClosed(object sender, EventArgs e)
        {
            CargaCotizacion();
        }

        private void cmbMonedaOpPaga_DropDownClosed(object sender, EventArgs e)
        {
            CargaCotizacion();
        }

        private void chkCambiaCot_CheckedChanged(object sender, EventArgs e)
        {
            if (chkCambiaCot.Checked)
                txt_cotizacion.Enabled = true;
            else {
                    txt_cotizacion.Enabled = false;
                    CargaCotizacion();
                }
        }

        private void txt_cotizacion_TextChanged(object sender, EventArgs e)
        {
            CargaCotizacion();
        }

        private void txt_codcliente_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            Form_Clientes_Operaciones frm = new Form_Clientes_Operaciones();
            frm.Show();
            
        }

        private void btnGuardaOperacion_Click(object sender, EventArgs e)
        {
            bool guarda = true;
            if (rdb_compra.Checked) {
                tipoOperacion = "Compra";
            }
            else if (rdb_cero.Checked)
            {
                tipoOperacion = "Cero";
            }
            else {
                MessageBox.Show("Marca un tipo de operacion", "Error");
                guarda = false;
            }
            if (guarda && Convert.ToInt32(txt_codcliente.Text) > 0)
            {
                Object cod_op;
                SqlCommand cmd = new SqlCommand();
                string fecha_vs;
                fecha_vs = Conexion.fecha_d + "." + Conexion.fecha_m + "." + Conexion.fecha_a;
                Convert.ToDateTime(fecha_vs);
                //Guardo la operacion
                string ConsultaSQL = "insert into operaciones(cod_cliente_o,fecha_o,hora_o) values (" + Convert.ToInt32(txt_codcliente.Text) + ",'"
                    + fecha_vs + "','" + Conexion.hora.ToString() + "')";
                SqlConnection cn = new SqlConnection(Conexion.rutaDB);
                cn.Open();
                SqlCommand comando = new SqlCommand(ConsultaSQL, cn);
                comando.ExecuteNonQuery();
                cn.Close();
                CargaOperaciones();
                for (int aux = 0; aux < (grillaAgregaDetalle.RowCount) - 1; aux++)
                {
                    ConsultaSQL = "execute Agrega_Detalle_Operacion "
                        + Convert.ToInt32(grillaAgregaDetalle.Rows[aux].Cells[0].Value)
                        + "," + Convert.ToInt32(grillaAgregaDetalle.Rows[aux].Cells[1].Value)
                        + ",'" + grillaAgregaDetalle.Rows[aux].Cells[2].Value
                        + "','" + grillaAgregaDetalle.Rows[aux].Cells[3].Value
                        + "'," + Convert.ToSingle(grillaAgregaDetalle.Rows[aux].Cells[4].Value)
                        + "," + Convert.ToSingle(grillaAgregaDetalle.Rows[aux].Cells[5].Value)
                        + "," + Convert.ToSingle(grillaAgregaDetalle.Rows[aux].Cells[7].Value)
                        + "," + Convert.ToSingle(grillaAgregaDetalle.Rows[aux].Cells[6].Value)
                        + ",'" + grillaAgregaDetalle.Rows[aux].Cells[8].Value + "'";
                    //MessageBox.Show(ConsultaSQL);

                    cn = new SqlConnection(Conexion.rutaDB);
                    cn.Open();
                    comando = new SqlCommand(ConsultaSQL, cn);  
                    comando.ExecuteNonQuery();
                    CargaDetalle();
                    cn.Close();
                }
                grillaAgregaDetalle.Rows.Clear();

                ConsultaSQL = "SELECT MAX(cod_operaciones_o+1) FROM Operaciones";
                cn = new SqlConnection(Conexion.rutaDB);
                cn.Open();
                comando = new SqlCommand(ConsultaSQL, cn);
                cod_op = comando.ExecuteScalar();
                Convert.ToInt32(cod_op);
                cn.Close();
                lbl_cod_operacion.Text = cod_op.ToString();
                lbl_detalle.Text = grillaAgregaDetalle.RowCount.ToString();
            }
            else {
                MessageBox.Show("Falta cargar el cliente", "Error");
            }
            btnGuardaOperacion.Enabled = false;
        }

        private void btn_agregarDetalle_Click(object sender, EventArgs e)
        {
            if (Convert.ToInt32(txt_codcliente.Text) > 0)
            {
                if (rdb_cero.Checked == true)
                    rbselecionado = rdb_cero.Text;
                if (rdb_compra.Checked == true)
                    rbselecionado = rdb_compra.Text;
                nuevo_detalle();
                btnGuardaOperacion.Enabled = true;
            }
            else {
                MessageBox.Show("Falta cargar el cliente", "Error");
            }
        }

        private void nuevo_detalle()
        {
             if (rdb_cero.Checked == true)
                rbselecionado = rdb_cero.Text;
            if (rdb_compra.Checked == true)
                rbselecionado = rdb_compra.Text;

            this.grillaAgregaDetalle.Rows.Add(lbl_cod_operacion.Text, lbl_detalle.Text, cmbMonedaOpCompra.SelectedItem.ToString(),
               rbselecionado, txt_cotizacion.Text, txt_bonificacion.Text, txt_pago.Text, txt_monto.Text, cmbMonedaOpPaga.SelectedItem.ToString());
            lbl_detalle.Text = grillaAgregaDetalle.RowCount.ToString();
        }

        private void btn_clientes_Click(object sender, EventArgs e)
        {
            if (bandera_clientes == false)
            {

                frm.Visible = true;
                bandera_clientes = true;
            }
            else {
                frm.Visible = false;
                txt_codigo_cliente.Text = Conexion.cod_cli.ToString();
                bandera_clientes = false;
            }
            
        }

        private void btn_clientes_VisibleChanged(object sender, EventArgs e)
        {
            txt_codigo_cliente.Text= Conexion.cod_cli.ToString();
        }

        private void bnt_clientes2_Click(object sender, EventArgs e)
        {

            if (bandera_clientes == false)
            {

                frm.Visible = true;
                bandera_clientes = true;
            }
            else
            {
                frm.Visible = false;
                txt_codcliente.Text = Conexion.cod_cli.ToString();
                bandera_clientes = false;
            }
            
        }


        //BUSCADOR
        private void btn_actualizar_Click(object sender, EventArgs e)
        {
            if (Conexion.ds_financiera.Tables["Detalle_Operaciones"] != null)
                Conexion.ds_financiera.Tables["Detalle_Operaciones"].Clear();
            if (Conexion.ds_financiera.Tables["Operaciones"] != null)
                Conexion.ds_financiera.Tables["Operaciones"].Clear();


            //Validar Fechas hasta

            if (txt_dia_d_buscop.Text == "" && txt_mes_d_buscop.Text == "" && txt_año_d_buscop.Text == "")
            {
                fecha_desde = "";
            }

            else
                if (txt_dia_d_buscop.Text != "" && txt_mes_d_buscop.Text == "" || txt_año_d_buscop.Text == "")
                {
                    MessageBox.Show("Fecha incompleta");
                }
                else fecha_desde = txt_dia_d_buscop.Text + "/" + txt_mes_d_buscop.Text + "/" + txt_año_d_buscop.Text;

            //validar Fecha hasta

            if (txt_dia_h_buscop.Text == "" && txt_mes_h_buscop.Text == "" && txt_año_h_buscop.Text == "")
            {
                fecha_hasta = "";
            }

            else
            {
                if (txt_dia_h_buscop.Text != "" && txt_mes_h_buscop.Text == "" || txt_año_h_buscop.Text == "")
                {
                    MessageBox.Show("Fecha incompleta");
                }
                else fecha_hasta = txt_dia_h_buscop.Text + "/" + txt_mes_h_buscop.Text + "/" + txt_año_h_buscop.Text;
            }

            string ConsultaSQLOperaciones="";

            if (rdb_operacion.Checked == true)
            {
                ConsultaSQLOperaciones = "Select * from Operaciones";
                metodos.AgregarTablaDataSetSQLServer(rutaFinancieraSQL, ConsultaSQLOperaciones + constructorFiltrarOperaciones(),
                                             "Operaciones", ref Conexion.ds_financiera);

                grilla_Operaciones.DataSource = Conexion.ds_financiera.Tables["Operaciones"];
            }


            if (rdb_detalle.Checked == true)
            {
                ConsultaSQLOperaciones = "Select * from Detalle_Operaciones";
                metodos.AgregarTablaDataSetSQLServer(rutaFinancieraSQL, ConsultaSQLOperaciones + constructorFiltrarOperaciones(),
                                             "Detalle_operaciones", ref Conexion.ds_financiera);
                grillaDetalle.DataSource = Conexion.ds_financiera.Tables["Detalle_operaciones"];
            }
        }

        private string constructorFiltrarOperaciones()
        {
            string ClausulaSQLHistorial = "";
            if (rdb_detalle.Checked == true)
            {
                string rdbactivo="";
                if (rdb_compra_d.Checked == true) rdbactivo = rdb_compra_d.Text;
                //if (rdb_venta_d.Checked == true) rdbactivo = rdb_venta_d.Text;
                if (rdb_cero_d.Checked == true) rdbactivo = rdb_cero_d.Text;

                if (cmb_moneda_d.Text != "" && cmb_moneda_d.Text != "Todas")
                {
                    ClausulaSQLHistorial = " Where cod_moneda_d='" + cmb_moneda_d.Text + "'"; //"'" + cmb_moneda_d.Text + "'";

                }
                if (rdbactivo != "")
                    ClausulaSQLHistorial = " Where Tipo_operacion_d=" + "'" + rdbactivo + "'";
                }
                else
            {
                if (txt_codigo_cliente.Text != "-1")
                    ClausulaSQLHistorial = " Where Cod_cliente_o=" + txt_codigo_cliente.Text;

                if (cmb_opcion.Text != "" && txt_codigo_operacion.Text != "")
                    ConstruirClausulaSQL("Cod_operaciones_o",
                                            cmb_opcion.Text,
                                            txt_codigo_operacion.Text,
                                            ref ClausulaSQLHistorial);
                // constructor fecha
                if (fecha_desde != "")
                {

                    if (ClausulaSQLHistorial == "")
                        ClausulaSQLHistorial = " WHERE ";
                    else
                        ClausulaSQLHistorial += " AND ";

                    ClausulaSQLHistorial += "fecha_o>=" + "'" + fecha_desde + "'";
                }

                if (fecha_hasta != "")
                {
                    if (ClausulaSQLHistorial == "")
                        ClausulaSQLHistorial = " WHERE ";
                    else
                        ClausulaSQLHistorial += " AND ";

                    ClausulaSQLHistorial += "fecha_o<=" + "'" + fecha_hasta + "'";
                }
            }

            return ClausulaSQLHistorial.ToString();
        }

        private void ConstruirClausulaSQL(string NombreCampo,
                                         string Operador,
                                         string Valor,
                                         ref string Clausula)
        {
            string d1 = "";  //Delimitador 1
            string d2 = ""; //Delimitador 2
            if (Clausula == "")
                Clausula = Clausula + " WHERE ";
            else
                Clausula = Clausula + " AND ";
            switch (Operador)
            {
                case "Igual a":
                    d1 = " = ";
                    d2 = "";
                    break;
                case "Mayor a":
                    d1 = " >= ";
                    d2 = "";
                    break;
                case "Menor a":
                    d1 = " <= ";
                    d2 = "";
                    break;
            }
            Clausula =
                Clausula + NombreCampo + d1 + Valor + d2;
        }

        private void rdb_compra_CheckedChanged(object sender, EventArgs e)
        {
            if (rdb_compra.Checked) { 
                CargaCotizacion();
            }
        }
        private void txt_monto_TextChanged(object sender, EventArgs e)
        {
            CargaCotizacion();
        }

        private void btnInvertir_Click(object sender, EventArgs e)
        {
            int indexTemp;
            indexTemp = cmbMonedaOpCompra.SelectedIndex;
            cmbMonedaOpCompra.SelectedIndex = cmbMonedaOpPaga.SelectedIndex;
            cmbMonedaOpPaga.SelectedIndex = indexTemp;
            CargaCotizacion();
        }

        private void btnEdiaOperacion_Click(object sender, EventArgs e)
        {
            gbEditaOperacion.Enabled = true;
            this.Size = new System.Drawing.Size(1300, 680);
            grillaAgregaDetalle.Visible = false;
            grillaDetalle.Visible = true;
            CargaDetalleEdit();
        }

        private void txt_monto_KeyPress(object sender, KeyPressEventArgs e)
        {
         
            if (Char.IsDigit(e.KeyChar) || Char.IsControl(e.KeyChar) || Char.IsPunctuation(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void btnGuardarEdit_Click(object sender, EventArgs e)
        {
            fecha_vs = Conexion.fecha_d + "." + Conexion.fecha_m + "." + Conexion.fecha_a;
            Convert.ToDateTime(fecha_vs);
            string ConsultaSQL;
            ConsultaSQL = "execute Modifica_caja_reversa '" + txtEditCodMonedaComp.Text + "'," + tempEditCompro + ",'" + fecha_vs + "'";
            SqlConnection cn = new SqlConnection(Conexion.rutaDB);
            cn.Open();
            SqlCommand comando = new SqlCommand(ConsultaSQL, cn);
            comando.ExecuteNonQuery();
            
            ConsultaSQL = "execute Modifica_caja_reversa_pago '" + txtEditCodMonedaPago.Text + "'," + tempEditPago + ",'" + fecha_vs + "'";
            cn = new SqlConnection(Conexion.rutaDB);
            cn.Open();
            comando = new SqlCommand(ConsultaSQL, cn);
            comando.ExecuteNonQuery();

            ConsultaSQL = "execute Modifica_Detalle_Operacion " + Convert.ToInt32(txtEditCodOP.Text) + ",'" + txtEditCodMonedaComp.Text + "'," + Convert.ToSingle(txtEditCot.Text) + "," + Convert.ToSingle(txtEditBoni.Text) + "," + Convert.ToSingle(txtEditMonto.Text) + "," + Convert.ToSingle(txtEditPago.Text) + ",'" + txtEditCodMonedaPago.Text + "'";
            cn = new SqlConnection(Conexion.rutaDB);
            cn.Open();
            comando = new SqlCommand(ConsultaSQL, cn);
            comando.ExecuteNonQuery();
            CargaDetalleEdit();
        }

        private void grilla_Operaciones_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (bandera_panel)
            {
                if (e.RowIndex < ((grilla_Operaciones.RowCount) - 1))
                    CargaDetalle();
            }
        }

        private void grillaDetalle_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            bmOperaciones.Position = e.RowIndex;
            tempEditCompro = Convert.ToDecimal(txtEditMonto.Text);
            tempEditPago = Convert.ToDecimal(txtEditPago.Text);
        }

        private void txtEditMonto_TextChanged(object sender, EventArgs e)
        {
            if (txtEditMonto.Text != "" && Convert.ToDecimal(txtEditMonto.Text)>0)
            txtEditPago.Text = Convert.ToString(Convert.ToDecimal(txtEditMonto.Text) * Convert.ToDecimal(txtEditCot.Text));
        }
    }
}

